home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
526-550
/
disk_542
/
chemnimate
/
cmtsource.lzh
/
2nd7.c
next >
Wrap
C/C++ Source or Header
|
1991-07-24
|
5KB
|
180 lines
/****************************************************************
* *
* Dit moet een vectorballsprogramma worden. *
* *
* Klaas. *
* *
* *
* *
* *
* *
****************************************************************/
#include <exec/types.h>
#include <graphics/gfx.h>
#include <graphics/gfxmacros.h>
#include <graphics/view.h>
#include <graphics/rastport.h>
#include <graphics/gfxbase.h>
#include <exec/exec.h>
#include "uni4.h"
extern struct DisplayInfo di; /*predefined in uni#.h, defined in ch#.c */
struct View view, *oldview;
struct ViewPort viewport;
struct ColorMap *cm;
struct BitMap bitmp1, bitmp2, sourcebitmap;
struct BitMap *bitmap;
extern struct RastPort rastport;
struct RasInfo rasinfo;
extern struct ColorMap *GetColorMap ();
struct GfxBase *gfxbase;
USHORT colortable[] =
/* colours 0-7 are for the screen
* back, white, black, blue , red , yellow,green, no use */
{0x242, 0xeee, 0x000, 0x33d, 0xd33, 0xcc3, 0x3e3, 0x222,
/* colour 8-15 are not in use */
9, 9, 9, 9, 9, 9, 9, 9,
/* colours 16-31 are for sprites, as we don't use sprites, all NULL.*/
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0};
UWORD *colorpalette;
struct Task *mytask;
BYTE oldpriority;
/* * * * * * * * * * * * * * * * * * * * * * */
SetUp ()
{
LONG i;
mytask = (struct Task *) FindTask (NULL); /*search mytask */
oldpriority = SetTaskPri (&mytask, 21); /* set TaskPri very high */
gfxbase = (struct GfxBase *) OpenLibrary ("graphics.library", 0L);
oldview = gfxbase->ActiView;
InitView (&view);
InitVPort (&viewport);
view.ViewPort = &viewport;
view.Modes = NULL;
viewport.Modes = NULL; /*just a normal Lo-res*/
/* Initialize bitmaps */
InitBitMap (&bitmp1, PDEPTH, PWIDTH, PHEIGHT);
InitBitMap (&bitmp2, PDEPTH, PWIDTH, PHEIGHT);
InitBitMap (&sourcebitmap, SDEPTH, SWIDTH, SHEIGHT);
InitRastPort (&rastport);
rastport.BitMap = &bitmp1;
SetDrMd (&rastport, JAM1); /*see-through holes in the text */
rasinfo.BitMap = &bitmp1;
rasinfo.RxOffset = (PWIDTH - VWIDTH) / 2;
rasinfo.RyOffset = (PHEIGHT - VHEIGHT) / 2;
rasinfo.Next = NULL;
for (i = 0; i < PDEPTH; i++)
{
bitmp1.Planes[i] = (PLANEPTR) AllocRaster (PWIDTH, PHEIGHT);
if (bitmp1.Planes[i] == NULL)
exit (-1);
BltClear (bitmp1.Planes[i], RASSIZE (PWIDTH, PHEIGHT), 1L);
bitmp2.Planes[i] = (PLANEPTR) AllocRaster (PWIDTH, PHEIGHT);
if (bitmp2.Planes[i] == NULL)
exit (-1);
BltClear (bitmp2.Planes[i], RASSIZE (PWIDTH, PHEIGHT), 1L);
sourcebitmap.Planes[i] = (PLANEPTR) AllocRaster (SWIDTH, SHEIGHT);
if (sourcebitmap.Planes[i] == NULL)
exit (-1);
BltClear (sourcebitmap.Planes[i], RASSIZE (SWIDTH, SHEIGHT), 1L);
}
viewport.DWidth = VWIDTH;
viewport.DHeight = VHEIGHT;
viewport.DxOffset = -12;
viewport.DyOffset = 0;
viewport.RasInfo = &rasinfo;
/********************** colourmap ***********/
cm = GetColorMap (32L);
colorpalette = (UWORD *) cm->ColorTable;
for (i = 0; i < 32; i++)
*colorpalette++ = colortable[i];
viewport.ColorMap = cm;
LoadPic (); /* put picture in sourcebitmap */
MakeVPort (&view, &viewport); /* calculate display*/
MrgCop (&view);
LoadView (&view);
bitmap = &bitmp1;
} /* end-of-SetUp() */
Quit ()
{
LONG i;
for (i = 0; i < PDEPTH; i++) /* free bitplanes */
{
if (bitmp1.Planes[i])
FreeRaster (bitmp1.Planes[i], PWIDTH, PHEIGHT);
if (bitmp2.Planes[i])
FreeRaster (bitmp2.Planes[i], PWIDTH, PHEIGHT);
if (sourcebitmap.Planes[i])
FreeRaster (sourcebitmap.Planes[i], SWIDTH, SHEIGHT);
}
if (cm) /* free other stuff */
FreeColorMap (cm);
FreeVPortCopLists (&viewport);
FreeCprList (view.LOFCprList);
/* restore the system's old screen */
LoadView (oldview);
/* restore the old priority of the task */
SetTaskPri (&mytask, oldpriority);
} /* end-of-Quit() */
/*************************************SwapShow
* swap the displayed and the drawn bitmap.
* and clear the before displayed bitmap.
*/
SwapShow ()
{
int n;
WaitTOF (); /* wait until bottom line is displayed */
if (di.whichone == 1)
{
di.whichone = 2;
rasinfo.BitMap = &bitmp1; /* swap the displayed bitmap */
ScrollVPort (&viewport); /* change display */
WaitTOF ();
rastport.BitMap = bitmap = &bitmp2; /* change drawing bitmap */
for (n = 0; n < PDEPTH; n++) /* 'clean' it */
BltClear (bitmp2.Planes[n], RASSIZE (PWIDTH, PHEIGHT), 1L);
}
else
{
di.whichone = 1;
rasinfo.BitMap = &bitmp2;
ScrollVPort (&viewport);
WaitTOF ();
rastport.BitMap = bitmap = &bitmp1;
for (n = 0; n < PDEPTH; n++) /* 'clean' it */
BltClear (bitmp1.Planes[n], RASSIZE (PWIDTH, PHEIGHT), 1L);
}
} /* end-of-SwapShow() */